Hi @lars76madsen 
You cannot do that with datasets, your only friend here will be some Velo code.
For instance, when a member visits the page, call a backend function to check if the user has already submitted any data or not, if not, do nothing, if yes, then extract their data, return it to the frontend and populate the form.
Here’s an example.
This code will run once the page is opened.
// A backend module called form.jsw;
import wixData from 'wix-data';
import { currentUser } from 'wix-users-backend';
export function getDetails() {
/* we're checking if the logged in user has already filled the form, and
if he/she did, return their data. Reject the promise if the user is not
logged in */
if (currentUser.loggedIn) {
return wixData.query('UserDetails').eq('_owner', currentUser.id).find()
.then((results) => {
if (results.length > 0) {
let item = results.items[0]; // The details of the current user
/* You can return the whole user details, or you can return
specific fields, like name, data of birth, picture and so on */
let details = {
_id: item._id, // We need this when updating the form
name: item.name,
dateOfBirth: item.dateOfBirth,
picture: item.profilePic
}
// Prepare the response
let response = {
type: 'success',
details: details
}
// Return the response.
return Promise.resolve(response);
} else {
let response = {
type: 'not found',
code: 404,
message: "User hasn't filled the form yet!"
}
return Promise.resolve(response);
}
})
} else {
// Reject if the user is not logged in
return Promise.reject({type: 'error', message: "You're not logged in", code: 500})
}
}
// This the form page
// Import our function "getDetails" from a backend web module "form.jsw".
import { getDetails } from 'backend/form.jsw';
let details; // A global variable to store the visitor's details
$w.onReady(async() => {
await getDetails().then((result) => {
if (result.type === 'success') {
// Get the details from the backend
details = result.details;
// populate the fields
$w('#name').value = details.name || '';
$w('#datePicker').value = details.dateOfBirth || null;
if (details.picture) { $w('#profile').src = details.picture }
} else if (result.type === 'not found') {
// Prompt the member to enter his/her data
$w('#message').text = "Please enter your details here";
}
}).catch(err => {
// Display the error message returned from the backend
$w('#errorMessage').text = err.message;
})
})
Now to code the save button, we need to add another function to the backend module to save or update the data
// A backend module called form.jsw;
export function saveData(details) {
/* Check if the details are new or not by checking if they have a valid "_id"
If the details are new, just insert them in the database, if not we need to get
the old details and update them */
if (typeof details.id === 'string') {
// The details have an ID;
return wixData.query('UserDetails').eq('_id', details.id).find()
.then(results => {
// If there are no matching results, that mean the _id is invalid
if (results.length > 0) {
let item = results.items[0];
// Updating the specific fields
item.name = details.name;
item.dateOfBirth = details.dateOfBirth;
item.picture = details.picture;
// Update the details in the database.
return wixData.update('UserDetails', item).then(() => {
let response = {
type: 'success',
operation: 'update'
}
// Resolve the promise
return Promise.resolve(response);
}).catch(err => {
let response = {
type: 'error',
operation: 'update',
level: 'wixData update',
error: {
raw: err,
message: `An error occurred! - Error: ${err}`;
}
}
return Promise.reject(response);
})
}
}).catch(err => {
if (err.type === 'error') {
return Promise.reject(err);
} else {
let response = {
type: 'error',
operation: 'update',
level: 'wixData query',
error: {
raw: err,
message: `An error occurred! - Error: ${err}`;
}
}
return Promise.reject(response);
}
})
} else {
return wixData.insert('UserDetails', details).then((item) => {
let response = {
type: 'success',
operation: 'new',
id: item._id, // We need to return the ID to update the form
}
return Promise.resolve(response);
}).catch(err => {
let response = {
type: 'error',
operation: 'insert',
level: 'wixData insert',
error: {
raw: err,
message: `An error occurred! - Error: ${err}`;
}
}
return Promise.reject(response);
})
}
}
Now on the frontend page where you have your form, we need to import the new function, and call it when we want to save the form data.
// This the form page
// Import our function "saveData" from a backend web module "form.jsw".
import { saveData } from 'backend/form.jsw';
// Inside the page's onReady function, add the following event handler
$w('#saveButton').onClick(() => {
// Disable the button until the operation is done.
$w('#saveButton').disable().then(async() => {
// Declare a variable for the new details
let newDetails = {
name: $w('#name').value,
dateOfBirth: $w('#datePicker').value,
picture: $w('#picture').src,
}
// Check to see if the values are new or not, and add the ID if it's not
if(details) {
if (typeof details._id === 'string') { newDetails.id = details._id }
}
// Call the backend function
await saveData(newDetails).then((result) => {
// Update all fields
details = newDetails
if (result.operation === 'update') {
// Update the details with the ID returned from the backend
details._id = result.id;
}
// Enable the button again
$w('#saveButton').enable().then(() => {
// Show a success message
$w('#successMessage').text = "Data was successfully saved!";
$w('#successMessage').show();
// Hide the message after a short time
setTimeout(() => {
$w('#successMessage').hide();
}, 3500)
})
}).catch(err => {
// Show an error message
$w('#errorMessage').text = err.error.message;
// log the error to the console
console.error(err);
})
})
})
Hope this helps~!
Ahmad